package com.ruifu.worksheet.service.impl;

import com.fhzncloud.cloud.common.security.service.CloudUser;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.ruifu.common.utils.BeanConverter;
import com.ruifu.common.vo.PageResultVO;
import com.ruifu.worksheet.dto.WsCustomizeTypeDTO;
import com.ruifu.worksheet.mapper.WsCustomizeTypeMapper;
import com.ruifu.worksheet.service.WsCustomizeTypeService;
import com.ruifu.worksheet.util.AuthorityUtil;
import com.ruifu.worksheet.vo.WsCustomizeTypeVO;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;

/**
 * @author yuanyundi
 * @date 2020/04/14
 */
@Service
@Transactional(rollbackFor=Exception.class)
public class WsCustomizeTypeServiceImpl implements WsCustomizeTypeService {
    @Autowired(required = false)
    private WsCustomizeTypeDTO wsCustomizeTypeDTO;

    /**
     * 注入Mapper接口
     */
    @Autowired(required = false)
    private WsCustomizeTypeMapper wsCustomizeTypeMapper;

    /**
     * 启用
     */
     private static final int KEY_START = 0;

    /**
     * 停用
     */
     private static final int KEY_STOP = 1;

    /**
     * 删除
     */
     private static final int KEY_DEL = 2;

    /**
     * 变更单类型列表条件查询
     *
     * @param pageNum 当前页
     * @param pageSize 显示条数
     * @param wsCustomizeTypeVO 查询条件
     * @param cloudUser 登陆人员信息
     * @return PageResultVO 查询集合
     */
    @Override
    public PageResultVO findPage(int pageNum, int pageSize, WsCustomizeTypeVO wsCustomizeTypeVO, CloudUser cloudUser) {
        //开启分页组件
        PageHelper.startPage(pageNum, pageSize);
        //查询分页对象
        Page<WsCustomizeTypeDTO> page = (Page<WsCustomizeTypeDTO>) wsCustomizeTypeMapper.findAll(wsCustomizeTypeVO, cloudUser);
        //循环查询权限码
        for(WsCustomizeTypeDTO wsCustomizeTypeDTO : page){
            String authorityCode = new AuthorityUtil().getWsTypeAuthorCode(wsCustomizeTypeDTO,cloudUser);
            wsCustomizeTypeDTO.setAuthorityCode(authorityCode);
        }
        /*DTO转VO*/
        List<WsCustomizeTypeVO> wsCustomizeTypeVOList = BeanConverter.copyList(page.getResult(), WsCustomizeTypeVO.class);
        //返回分页结果
        return new PageResultVO(page.getTotal(), wsCustomizeTypeVOList);
    }

    /**
     * 变更单类型单一查询
     *
     * @param ctTypeId 主键ID
     * @return wsCustomizeTypeVO 变更单类型VO
     */
    @Override
    public WsCustomizeTypeVO findById(Long ctTypeId,CloudUser cloudUser){
        //根据id查询变更类型数据
        wsCustomizeTypeDTO = wsCustomizeTypeMapper.findById(ctTypeId);
        //设置权限码
        wsCustomizeTypeDTO.setAuthorityCode(new AuthorityUtil().getWsTypeAuthorCode(wsCustomizeTypeDTO,cloudUser));
        /*dto转vo*/
        return BeanConverter.copyProperties(wsCustomizeTypeDTO,WsCustomizeTypeVO.class);
    }

    /**
     * 变更单类型新增
     *
     * @param wsCustomizeTypeVO 变更类型DTO
     */
    @Override
    public void insertEntity(WsCustomizeTypeVO wsCustomizeTypeVO, CloudUser cloudUser){
        wsCustomizeTypeDTO = BeanConverter.copyProperties(wsCustomizeTypeVO, WsCustomizeTypeDTO.class);
        //储存到数据库
        wsCustomizeTypeMapper.insert(wsCustomizeTypeDTO,cloudUser);
    }

    /**
     * 变更单类型编辑
     *
     * @param wsCustomizeTypeVO  变更类型VO
     */
    @Override
    public void updateEntity(WsCustomizeTypeVO wsCustomizeTypeVO, CloudUser cloudUser){
        //VO转DTO
        wsCustomizeTypeDTO = BeanConverter.copyProperties(wsCustomizeTypeVO, WsCustomizeTypeDTO.class);
        //修改数据库
        wsCustomizeTypeMapper.update(wsCustomizeTypeDTO,cloudUser);
    }

    /**
     * 变更单类型启动/停用/删除
     * @param ctTypeId 主键ID
     * @param operFlag 操作标识{0:启用，1:停用，2:删除}
     */
    @Override
    public void  operEntity(Long ctTypeId, int operFlag,CloudUser cloudUser){
        //根据id查询变更类型数据
        wsCustomizeTypeDTO = wsCustomizeTypeMapper.findById(ctTypeId);
        //根据不同的操作类型设置
        if (KEY_START == operFlag){
            wsCustomizeTypeDTO.setCtStatus("0");
        }
        if (KEY_STOP == operFlag){
            wsCustomizeTypeDTO.setCtStatus("1");
        }
        if (KEY_DEL == operFlag){
            wsCustomizeTypeDTO.setDelFlag("1");
        }
        //更新到数据库
        wsCustomizeTypeMapper.operEntityById(wsCustomizeTypeDTO,cloudUser);
    }

    /**
     * 变更单类型 新增/修改 提交校验
     * @param ctClass 类别
     * @param ctName 类型名称
     * @return int 查询检查数据的条数
     */

    @Override
    public int checkSubmit(int ctClass, String ctName, CloudUser cloudUser) {
        return wsCustomizeTypeMapper.countRowForName(ctClass,ctName,cloudUser);
    }

    /**
     * 变更单类型 新增/修改 提交校验
     *
     * @param ctCode 类型编号
     * @param cloudUser 登录人员信息
     * @return Integer 查询条数
     */
    @Override
    public int checkSubmit(String ctCode, CloudUser cloudUser) {
        return wsCustomizeTypeMapper.countRowForCode(ctCode,cloudUser);
    }

    /**
     * 账套号数据同步
     *
     * @param sourceSetId
     * @param targetSetId
     */
    @Override
    public void copyWsCommonSheetList(Long sourceSetId, Long targetSetId) {
        List<WsCustomizeTypeDTO> wsCustomizeTypeDTOList = wsCustomizeTypeMapper.selectListBySetId(sourceSetId);
        for(WsCustomizeTypeDTO wsCustomizeTypeDTO:wsCustomizeTypeDTOList){
            wsCustomizeTypeDTO.setCtTypeId(null);
            wsCustomizeTypeDTO.setSetSid(targetSetId);
            wsCustomizeTypeMapper.insertWsTypeDTO(wsCustomizeTypeDTO);
        }
    }
}
